Skip to main content

Python 集合

本来我们来系统的学习什么是集合、创建集合、集合新增、集合修改、集合查询、集合删除、集合运算(交集、并集、差集)、集合的常用方法,帮助大家系统学习Python集合的全部知识。

什么是集合

本节我们来介绍一下Python内置数据类型的最后一个,也就是集合,集合它的英文单词是set,翻译为中文称之为集合,那么什么是集合呢?集合在Python中也是一个无序的数据集集合,这就与我们前面介绍的字典非常相似了,所以本节我们就可以对照字典来学习集合 看一下字典和集合它们之间的相同和不同。

字典和集合对比

  • 字典它使用来表示,在大括号中的元素使用键值对儿,来进行表示。集合它也使用大括号,在集合中它只有值,没有键。
  • 字典它是无序的,集合也是无序的。
  • 字典它属于可变类型,可以对它进行增删改查。集合也是可变类型,它比较特殊,我们虽然可以对集合进行修改,但我们却不能对集合中不可变类型的元素进行修改。
  • 字典中它的key值是不能重复的,如果有重复,后面的值会覆盖掉前面的值。在集合中value是不能重复的,如果有多个,那么只保留一个。

创建集合

本节我们来学习创建集合。在Python中,可以使用大括号 {} 或者 set() 函数来创建集合。如果要创建一个空集合,只能使用set()函数,因为 {} 创建的是空字典。

  1. 使用{} 直接创建集合
set_val = {1,2,3,4,5}
print(type(set_val))

输出结果:

<class 'set'>
  1. 使用set创建空集合
empty_set = set()
print(type(empty_set))
val = {}
print(type(val))

输出结果:

<class 'set'>
<class 'dict'>

这里需要注意的是,我们创建一个空的集合的时候不能使用单独的大括号来创建,因为单独的大符号,它表示一个字典。

  1. 使用 set() 函数把它类型的数据转化为集合
set_val1 = set([1, 2, 3, 4])
print(set_val1)
string_val2 = 'hello world'
set_value2 = set(string_val2)
print(set_value2)

输出结果:

{1, 2, 3, 4}
{'h', 'e', 'o', 'r', 'd', 'l', ' ', 'w'}

在这个结果中,将字符串中的每一个字符作为一个元素,而且它是无序的。对于我们之前的hello,world是完全不同的,此外呢,你还会发现这里只有一个l,而我们的hello world中有三个l,这是因为集合它是不能够重复的,当有多个元素的时候,它只会保留一个。这也体现出集合的一个特点它就可以去重,当你要去重的时候,你就可以把它转化为集合,集合自动就完成了去重的功能。

  1. 直接创建集合支持不可变数据类型元素

集合可以包含多种不同的数据类型,例如数字、字符串、元组,不能包含列表和字典。

new_set = {'hello',123,123.456,(1,2,3)}
print(new_set)

输出结果:

{'hello', 123, 123.456, (1, 2, 3)}

我们尝试一下在集合中添加列表和字典

new_set = {'hello',123,123.456,(1,2,3),[1,2,3]}
new_set1 = {'hello',123,123.456,(1,2,3), {'name':'andy'}}
print(new_set)
print(new_set1)

输出结果:

TypeError: unhashable type: 'list'
TypeError: unhashable type: 'dict'

所以说这个集合中你只能添加一些不可变类型,可变类型的元素是不能添加的。

下面我们来总结一下集合的特点:

  • 集合是无序的
  • 集合中的元素是唯一的,当有多个重复元素的时候,集合中只会保留一个元素。
  • 集合自身可以被修改,但是集合中的不可变数据是不能被修改的

集合新增

本节我们来学习Python 集合的新增操作,使用add() 方法像集合中添加新的元素。add() 方法用于向集合中添加一个元素,如果元素已存在,则不进行任何操作。

语法:

set.add(element)

参数:

  • element:要添加的元素。

实例

实例1:使用add方法向集合中添加元素

set_val = {'hello',123,(1,2,3)}
set_val.add('andy')
print(set_val)

输出结果:

{123, 'hello', 'andy', (1, 2, 3)}

有一点需要注意的只能添加不可变类型数据,可变类型数据是不允许添加的

set_val = {'hello',123,(1,2,3)}
set_val.add('andy')
set_val.add([1,2,3]) #向集合中添加可变类型数据
print(set_val)

输出结果:

TypeError: unhashable type: 'list'

当我们新增一个可变类型的时候,比如说添加一个列表,这里就提示我们错误信息了,因为列表它是unhashable,就是不可哈西的,所以这里会报一个TypeError错误。

集合修改

本节我们来学习集合的修改,集合修改我们是用update() 方法,update() 方法用于向集合中添加多个元素。如果添加的元素已经存在于集合中,则不会重复添加。

update() 语法:

set.update(iterable)

参数:

  • iterable:可迭代对象,可以是列表、元组、字典、集合等。

实例2:像集合中添加多个元素

set_val = {"hello", "world", 123}
set_val.update(["daxiongketang", "andy"])
print(set_val)

输出结果:

{'hello', 'daxiongketang', 'andy', 'world', 123}

集合查询

本节我们来学习在集合中查询在Python中,可以使用in关键字来判断一个元素是否在集合中,这是集合查询的一种方式。

语法:

element in set_name

其中,element表示要查询的元素,set_name表示要查询的集合名称。

返回值:

如果element在set_name中,则返回True;如果element不在set_name中,则返回False。

实例1:使用in判断一个元素是否在集合中

set_val = {'daxiongketang', 'andy', 'Python','大熊'}
print('andy' in set_val)
print('xiaoxiong' in set_val)

输出结果:

True
False

在上面的例子中,我们创建了一个名为my_set的集合,然后使用in关键字来判断'andy'和'xiaoxiong'是否在集合中。由于'andy'在集合中,所以第一个查询返回True,而'xiaoxiong'不在集合中,所以第二个查询返回False。

集合删除

本节我们来学习对集合进行删除操作。本文将介绍Python集合删除中的四个方法:del、pop、remove、discard,总结表格如下:

方法描述示例
del删除整个集合my_set = {1, 2, 3} del my_set print(my_set) # Output: NameError: name 'my_set' is not defined
pop随机删除集合中的一个元素并返回被删除的元素my_set = {1, 2, 3} print(my_set.pop()) # Output: 1
remove删除集合中指定元素,若元素不存在则抛出异常my_set = {1, 2, 3} my_set.remove(2) print(my_set) # Output: {1, 3}
discard删除集合中指定元素,若元素不存在则不执行任何操作my_set = {1, 2, 3} ```
  1. del方法

del 方法来删除整个集合。

语法如下:

del set_name[index]   #set_name 为要删除元素的集合名称

实例1:过del方法来删除整个集合

set_val = {'daxiongketang', 'andy', 'Python'}
del set_val
print(set_val)

输出结果:

NameError: name 'set_val' is not defined

可以看到,结果这里提示NameError: name 'set_val' is not defined,说明它不存在,也就是这里的集合set_val删除成功了。

  1. pop()方法

pop()方法可以随机删除集合中的一个元素,并返回该元素的值。其

语法如下:

set_name.pop()    #set_name 为要删除元素的集合名称

实例2:使用pop()方法可以随机删除集合中的一个元素

set_val = {'daxiongketang', 'andy', 'Python','大熊'}
pop1 = set_val.pop()
print(set_val)
print(pop1)
pop2 = set_val.pop()
print(set_val)
print(pop2)

输出结果:

{'大熊', 'daxiongketang', 'andy'}
Python
{'daxiongketang', 'andy'}
大熊

可以看到,pop 方法随机删除集合中的一个元素,并返回该元素的值。

  1. remove()方法

remove 方法可以删除集合中指定的元素。其语法为:

set_name.remove(element)

其中,set_name 为要删除元素的集合名称,element 为要删除的元素。

实例3:使用remove 方法删除集合中指定的元素

set_val = {'daxiongketang', 'andy', 'Python','大熊'}
set_val.remove(('daxiongketang'))
print(set_val)

输出结果:

{'andy', 'Python', '大熊'}

可以看到,remove 方法删除集合中指定的元素。在本例中,被删除的元素是'daxiongketang'。

需要注意的是,如果要删除的元素不存在于集合中,remove 方法会抛出 KeyError 错误。因此,在使用remove 方法时,应该先判断要删除的元素是否存在于集合中。

set_val = {'daxiongketang', 'andy', 'Python','大熊',1,2,3}
if 3 in set_val:
set_val.remove(3)
else:
print("元素不存在")
print(set_val)

输出结果:

{1, 2, 'andy', 'daxiongketang', '大熊', 'Python'}
  1. discard()方法

discard 方法与 remove 方法类似,可以删除集合中指定的元素。

语法如下:

set_name.discard(element)

其中,set_name 为要删除元素的集合名称,element 为要删除的元素。

与 remove 方法不同的是,如果要删除的元素不存在于集合中,discard 方法不会抛出错误,而是直接忽略该操作。

实例4:使用discard 方法删除集合中指定的元素

set_val = {'daxiongketang', 'andy', 'Python','大熊'}
set_val.discard('xiaoxiong')
print(set_val)

输出结果:

{'andy', 'Python', 'daxiongketang', '大熊'}

可以看到,discard 方法删除集合中指定的元素。在本例中,要删除的元素xiaoxiong不存在于集合中,但该操作并未出现错误。

集合运算

  1. 交集

本节我们来学习Python 集合运算中的交集。交集是指两个集合中共同存在的元素组成的新集合。用数学符号表示为 A ∩ B。在 Python 中,可以使用“&”符号或者 intersection() 方法、intersection_update来进行交集运算。

(1)intersection() 方法

语法如下:

set.intersection(*others) 

该方法接受参数others,表示其他要进行交集操作的集合,返回值为一个新的集合,包含当前集合和所有其他集合中共同的元素。

实例1:使用 intersection() 方法计算交集

set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set_val = set1.intersection(set2)
print(set_val)

输出结果:

{40, 50, 30}

其中,intersection() 方法接受一个集合作为参数,返回一个新的集合,包含两个集合共同存在的元素。

(2)intersection_update函数

intersection_update函数是Python中集合运算的一个函数,用于获取两个集合的交集,并将结果更新到原始集合中,即将原始集合修改为交集。

语法如下:

set.intersection_update(set1, set2, ...setN)

其中,set1、set2、...setN为需要进行交集运算的集合,可以传入多个集合。

实例2:使用intersection_update函数求两个集合的交集

set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set1.intersection_update(set2)
print(set1)

输出结果:

{40, 50, 30}

运行结果为30,即set1集合中只剩下40、50和30,因为它们是set1和set2的交集。

实例3:使用intersection_update函数求多个集合的交集

set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set3 = {40,90}
set1.intersection_update(set2,set3)
print(set1)

输出结果:

{40}

运行结果为40,即set1集合中只剩下40,因为它是set1、set2和set3的交集。

(3)使用“&”符号计算交集

使用“&”符号可以快速计算两个集合的交集。

实例4:使用“&”符号计算两个集合的交集

set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set3 = set1 & set2
print(set3)

输出结果为:

{40, 50, 30}

其中,“&”符号表示交集运算,set3 为集合 30,即集合 set1 和 set2 中共同存在的元素。

实例5:使用多个集合计算交集

除了计算两个集合的交集,还可以计算多个集合的交集。例如:

set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}
set4 = set1 & set2 & set3
print(set4)

输出结果为:

{3}

其中,set1 & set2 & set3 表示先计算 set1 和 set2 的交集,再计算这个结果和 set3 的交集。最终结果为集合 3,即三个集合中共同存在的元素。

  1. 并集

并集是指两个或多个集合的所有元素的集合。如果两个集合 A 和 B 分别有 a 和 b 个元素,那么它们的并集就是包含 a+b 个元素的集合。在 Python 中,可以使用 union() 或者 "|" 运算符来求两个集合的并集。

(1)union() 方法

语法:

set.union(set1, set2, ...)

该方法可以传入一个或多个集合作为参数,也可以不传入参数。如果不传入参数,则返回原集合本身。

返回值:union() 方法合并两个合集

该方法返回一个新的集合,包含所有传入集合和原集合中的元素。

实例6:使用union() 方法合并两个集合

set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set3 = set1.union(set2)
print(set3)

输出结果:

{1, 2, 3, 70, 40, 50, 60, 30}

(2)"|" 运算符

语法:

set1 | set2 | ...

该运算符可以使用一个或多个集合作为参数,也可以不使用参数。如果不使用参数,则返回原集合本身。

返回值:

该运算符返回一个新的集合,包含所有传入集合和原集合中的元素。

实例7:使用"|" 运算符合并两个集合

set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set3 = set1 | set2
print(set3)

输出结果:

{1, 2, 3, 70, 40, 50, 60, 30}
  1. 差集

差集是指在一个集合中出现的元素,但在另一个集合中没有出现的元素。Python 中可以使用“-”运算符或者 difference() 方法、difference_update() 方法来实现差集运算。

(1)difference() 方法

语法

set1.difference(set2)

其中,set1和set2都是set对象。该方法将返回set1中不在set2中的元素组成的新集合,不会修改set1和set2本身。

实例7:使用 difference() 方法实现差集

set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set3 = set1.difference(set2)
print(set3)

输出结果:

{1, 2, 3}

(2)difference_update()方法

Python中的set对象还提供了difference_update()方法来计算两个集合的差集,并将结果直接更新到set1中。

语法如下:

set1.difference_update(set2)

其中,set1和set2都是set对象。该方法将从set1中移除在set2中出现的元素,返回None。

实例8:difference_update()方法计算集合差集

set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set1.difference_update(set2)
print(set1)

输出结果:

{1, 2, 3}

需要注意的是,使用difference_update()方法会直接修改set1,因此需要谨慎使用。

(3)"-" 运算符

语法:

set1 - set2 - ...

该运算符可以使用一个或多个集合作为参数,也可以不使用参数。如果不使用参数,则返回原集合本身。

返回值:

该运算符返回一个新的集合,包含所有传入集合和原集合中的元素。

实例9:使用"-" 运算符计算集合差集

set1 = {1,2,3,30,40,50}
set2 = {30,40,50,60,70}
set3= set1-set2
print(set3)

输出结果:

{1, 2, 3}

集合常用方法

本节我们来介绍一下集合的常用方法汇总,集合也是Python中最常用的数据类型,所以Python提供了非常多的操作集合的方法。下面按照使用程度的高低给大家做了一个集合常用方法的表格,并且每个方法带超链接,点击方法名字,都有对各个方法的详细介绍。

方法名称方法描述使用程度
add()向集合添加元素非常常用
clear()删除集合中的所有元素常用
copy()返回集合的浅拷贝常用
difference()返回两个集合之间的差集常用
discard()删除集合中指定的元素常用
intersection()返回两个集合之间的交集常用
isdisjoint()判断两个集合是否没有交集常用
issubset()判断一个集合是否是另一个集合的子集常用
issuperset()判断一个集合是否是另一个集合的超集常用
pop()随机删除集合中的一个元素常用
remove()删除集合中指定的元素,如果元素不存在则报错常用
union()返回两个集合的并集常用
update()将一个集合中的元素添加到另一个集合中常用
difference_update()删除一个集合中与另一个集合相同的元素较常用
intersection_update()删除一个集合中与另一个集合不同的元素较常用
symmetric_difference()返回两个集合之间的对称差集较常用
symmetric_difference_update()将一个集合更新为两个集合之间的对称差集较常用
len()返回集合中元素的数量较常用
max()返回集合中的最大值较常用
min()返回集合中的最小值较常用